'use strict';
let config = require('./config/config');
let gulp = require('gulp');
let $ = require('gulp-load-plugins')();
var bs = require("browser-sync").create();
var spritesmith  = require("gulp.spritesmith"); 
let isMedule = false;
// default
gulp.task('default', ['clean'], $.sequence('sprite', ['html', 'css', 'js', 'img', 'mainjs', 'commonjs']));
// watch & clean
gulp.task('watch', ['default'], $.sequence('w'));
// watch
gulp.task('w', function () {
  gulp.start('server');
  // html
  gulp.watch('./src/**/*.pug', ['html']);
  // css
  gulp.watch(config.css.src, function (e) {
    isMedule = false;
    $.sequence('css')(function () {});
  });
  gulp.watch(config.css.meduleSrc, function (e) {
    isMedule = true;
    $.sequence('css')(function () {});
  });
  // js
  gulp.watch(config.js.src, ['js']);
  // img
  gulp.watch(config.img.src, ['img']);
});
// clean
gulp.task('clean', function () {
  return gulp.src('./build').pipe($.clean());
});
// html
gulp.task('html', function () {
  return gulp.src(config.html.src)
    .pipe($.cached('views'))
    .pipe($.pug(config.html.pugSet))
    .pipe(gulp.dest(config.html.build))
});
// css
gulp.task('css', function () {
  return gulp.src(config.css.src)
    .pipe($.plumber())
    .pipe($.if(!isMedule, $.cached('css')))
    .pipe($.sass())
    .pipe($.autoprefixer(config.css.prefixerSet))
    .pipe($.minifyCss(config.css.minifySet))
    .pipe($.plumber.stop())
    .pipe(gulp.dest(config.css.build))
});
// js
gulp.task('js', function() {
  return gulp.src(config.js.src)
    .pipe($.changed(config.js.build))
    .pipe(gulp.dest(config.js.build))
});
// img
gulp.task('img', function() {
  return gulp.src(config.img.src)
    .pipe($.changed(config.img.build))
    .pipe(gulp.dest(config.img.build))
});
// mainjs
gulp.task('mainjs', function () {
  return gulp.src(config.concat.libSrc)
    .pipe($.concat(config.concat.libName))
    .pipe($.uglify())
    .pipe(gulp.dest(config.concat.build));
});
// commonjs
gulp.task('commonjs', function () {
  return gulp.src(config.concat.commonSrc)
    .pipe($.concat(config.concat.commonName))
    .pipe($.uglify())
    .pipe(gulp.dest(config.concat.build));
});
// sprite
gulp.task('sprite', function () {
  gulp.src(config.sprite.src)
    .pipe(spritesmith(config.sprite.spritesmith))
    .pipe(gulp.dest(config.sprite.build))
})
// server
gulp.task('server', function () {
  bs.init({
    logPrefix: 'bs', ui: false, notify: false, logFileChanges: true,
    open: false,
    port: 6686,
    server: {
      baseDir: './build',directory: true
    },
    files: [{
      match: [
        './build/**/*.css',
        './build/**/*.js',
        './build/**/*.{png,jpg,gif}',
        './build/**/*.html'
      ],
      fn: function (event, file) {if (event === "change") {bs.reload();}}
    }]
  })
});